package main

import "fmt"

// 函数定义 基本格式
// 参数的格式：有参数的函数 参数类型简写 可变参数
// 返回值的格式： 有返回值 多返回值 命名返回值
// 函数类型: 函数也是一种类型
// 高阶函数
// 匿名函数 没有名字的函数

// 变量作用域 : 全局作用域 函数作用域(先在函数内部找变量 找不到往外层找  函数内部的变量 外部是访问不到的) 代码块作用域

// func f1() {
// 	fmt.Println("Hello沙河")
// }
// func f2() int {
// 	return 10
// }

// // 函数也可以作为参数的类型
// func f3(x func() int) {
// 	ret := x()
// 	fmt.Println(ret)
// }
func f4(x, y int) int {
	return x + y
}

func ff(a, b int) int {
	return a + b
}
func fs() int {
	return 100
}
func f5(x func() int) func(int, int) int {
	return ff
}
func main() {
	// a := f1
	// fmt.Printf("%T\n", a) // 没有返回值也没有参数的函数类型func
	// b := f2
	// fmt.Printf("%T\n", b) // 有返回值的函数类型
	// f3(f2)
	ref := f4(1, 2)
	fmt.Println(ref)
	ret := f5(fs)
	fmt.Println(ret)
	shen := ret(22, 2)
	fmt.Printf("%T\n", ret)
	fmt.Println(shen)
}
